perm filename PLAY.FAI[LK,LCS] blob sn#088112 filedate 1974-12-31 generic text, type T, neo UTF8
00100		TITLE	BUFFER;  DOROTHY BENDER ****** GARPLY *******
00200
00300	;  ROUTINE TO READ THE OUTPUT FROM THE MUSIC
00400	;  PROGRAM AND CALL THE D-A CONVERTER TO PLAY.
00500	;  
00600	;  THE NAME OF THE FILE TO BE INPUTTED IS 'MUSIC',
00900
01000	A   ←   1     ;WORK
01100	B   ←   2     ;WORK
01200	RET ←   3     ;RETURN ACCUMULATOR
01300	BUFSIZ ←=2048   
01400	↓DSKCHN ←1             ;DISK CHANNEL FOR INPUT
01500	↓ADCHN  ←2             ;D-A CHANNEL FOR OUTPUT
01600
01700		OPDEF	READCH [51B8]
01800	        OPDEF   MESSAGE[51B8!3B12]
01900
02000	BEG:	CALLI	0,0         ;RESET I/O DEVICES
02100	 	OPEN 	DSKCHN,[17  ;MODE
02200			'DSK   '    ;DEVICE NAME
02300	 		0]          ;NO BUFFER HEADERS
02400		HALT	BEG         ;RESTART IF DEVICE IS UNAVAILABLE
02500
02600		SETZM	FILBLK+3    ;FOR RESTART
02650		SETZM	FILBL2+3    ;FOR RESTART
02700	;;LX:	MESSAGE [ASCIZ/
02800	;;  TYPE `P' TO PLAY FROM DISK
02900	;;/]
03000	;;	readch a
03300	;;	caie a,"P"
03400	;;	jrst lx
03500	;;	skipe filblk+3	;is this first time through ?
03600	;;	jrst pla2	;No. Parameters already set up.
03700		;FIND OUT NUMBER OF CHANNELS AND
03800		;THE SPEED.
03900
04000		MESSAGE	[ASCIZ/HOW MANY CHANNELS? /]
04100		READCH	A
04200		SUBI	A,"0"+1		;CONVERT TO BINR AND ADD 1
04300		DPB	A,[POINT 2,OUTBIT,26]
04400
04500		MESSAGE [ASCIZ/ WHAT IS THE SPEED? /]
04600		READCH  A
04700		SUBI	A,"0"
04800		DPB	A,[POINT 3,OUTBIT,32]
04805	
04810	LX:	MESSAGE [ASCIZ/
04825	  TYPE `P' TO PLAY FROM DISK
04840	/]
04855		readch a
04870		caie a,"P"
04885		jrst lx
04900
05000	PLA2:	SETZM FILBLK+3
05050		SETZM FILBL2+3
05100		LOOKUP	DSKCHN,FILBLK
05120		SKIPA			;CAN'T FIND MUSIC.MUS
05140		JRST XOPEN		;FOUND IT
05160		LOOKUP  DSKCHN,FILBL2	;TRY FOR MUSAA.DMD
05200
05300		JRST	[MESSAGE[ASCIZ/
05400			*** MUSIC FILE NOT FOUND/]
05500			CALLI  12]
05600	        ;EXIT IF FILE IS MISSING
05650		MOVE A,FILBL2+3	;GET LENGTH OF MUSAA.DMD
05675		MOVEM A,FILBLK+3;PUT IT IN RIGHT PLACE
05700
05710	XOPEN:	MOVSI	'XGP'	;DOWN TO XGPOK FOR XGP CONFLICT.
05720		DEVUSE	0,	
05730		HLRZ 	0,0
05740		CAIN	400000
05750		JRST	XGPOK
05760		INIT	16,17
05770		SIXBIT	.XGP.
05780		0
05790		JRA	16,2(16)
05800	XGPOK:	OPEN	ADCHN,[117 	;MODE
05900	         	'AD    '        ;DEVICE NAME
06000	 		0]              ;NO BUFFER HEADERS
06100
06200	  	JRST	[MESSAGE[ASCIZ/
06300			***D-A NOT AVAILABLE/]
06400			CALLI  12]
06500		;EXIT IF D-A IS UNAVAILABLE
06600
06700	SPWAR:	SPCWAR 17,[CALLI]
06800		MESSAGE [ASCIZ/ GO? /]
06900		READCH A
07000
07100
07200	LNTH:	movs a,filblk+3		;get length of file.
07300		movnm a,nwd
07400
07500	;	-----------------------------------------
07600
07700		;BEGIN MAIN BODY OF PROGRAM
07800
07900	LOOP:	JSP	RET,SUB		;ROUTINE TO READ AND WRITE
08000		BUF1-1 			;USE BUF1 FOR THE I/O
08100		JUMPLE	B,OUT    	;DONE
08200		
08300		JSP	RET,SUB		;CALL IT AGAIN
08400		BUF2-1			;USE BUF2 FOR THE I/O
08500		JUMPG	B,LOOP		;GO BACK FOR MORE IF B>0
08600
08700	OUT:	close dskchn,		;END OF PROGRAM.
08800		releas adchn,
08850		RELEASE 16,
08900		SPCWAR 0,'SSW'
09000		jrst lx
09100
09200		;SUBROUTINE TO SET UP IOWD AND READ AND WRITE.
09300		;  1(RET) WILL BE THE RETURN
09400		;  0(RET) WILL BE THE ADDRESS OF THE BUFFER TO BE
09500		;         PUT IN THE RIGHT HALF OF THE IOWD.
09600		;  A      WILL BE A WORK REGISTER
09700	    	;  B      WILL BE TESTED ON THE OUTSIDE.
09800
09900	SUB:	MOVNI	A,BUFSIZ	;PICK UP AND COMPLEMENT BUFSIZ
10000		ADDB	A,NWD		;A←NWD-BUFSIZ
10100					;NWD←NWD-BUFSIZ
10200		MOVE	B,A		;SAVE B TO BE TESTED FOR LAST
10300					;TIME.
10400		JUMPL	A,LAST		;SET UP FOR LAST TIME.
10500		MOVEI	A,0		
10600
10700		;THE IOWD LOOKS LIKE:
10800		;  [-BUFSIZ / BUFI-1]
10900
11000	LAST:	ADDI	A,BUFSIZ
11100		MOVNS	A		;COMPLEMENT A
11200		HRL	A,0(RET)	;PICK UP BUFI AND MOVE IT
11300					;TO THE LEFT SIDE OF A.
11400		MOVSM	A,INLIST	;SWAP A AND MOVE IT.
11500		MOVSM	A,OUTWC		;SAME FOR OUTPUT.
11600		INPUT	DSKCHN,INLIST	;READ A RECORD.
11700		OUTPUT	ADCHN,OUTWC	;WRITE THE RECORD.
11800		JRST	1(RET)		;RETURN
11900
12000	;	-----------------------------------------
12100
12200	; STORAGE:
12300
12400	NWD:	0			;FOR NUMBER OF WORDS OF INPUT.
12500	↓BUF1:	BLOCK	BUFSIZ+1	;BUFFER 1
12600	BUF2:	BLOCK	BUFSIZ+1	;BUFFER 2
12700
12800	FILBLK: 'MUSIC '		;FILENAME FOR INPUT
12900		'MUS   '			;EXTENSION
13000		0			;INFORMATION ON FILE
13100		0			;PROJECT PROG#
13200
13210	FILBL2: 'MUSAA '		;FILENAME FOR INPUT, 2ND CHOICE
13228		'DMD   '			;EXTENSION
13246		0			;INFORMATION ON FILE
13264		0			;PROJECT PROG#
13282
13300	CLIST:	IOWD	1,NWD		;FOR THE FIRST RECORD
13400		0
13500
13600	INLIST:	0			;WILL CONTAIN AN IOWD
13700		0
13800
13900	OUTWC:	0			;WILL CONTAIN AN IOWD FOR D-A
14000		3650			;MAGIC BITS FOR 136.
14100	OUTBIT: 4000			;BITS FOR D-A
14200		BLOCK	2
14300
18000	end beg